Trong Ruby, nhập/xuất không chỉ đơn giản là một tập hợp lệnh; nó là một hệ thống kiến trúc dựa trên luồng. Ở trung tâm của hệ thống này là lớp IO lớp, đóng vai trò như một kênh hai chiều giữa chương trình của bạn và thế giới bên ngoài. Dù bạn đang tương tác với một tệp tin, cổng mạng hay giao diện dòng lệnh của người dùng, Ruby đều coi chúng như các luồng tổng quát.
1. Cầu nối hai chiều
Một đối tượng IO là một trừu tượng hóa thống nhất. Trong khi hệ điều hành thấy các mô tả tệp tin cho đọc và ghi (giống như trong một ống dẫn), Ruby bao gói những thứ này thành một đối tượng duy nhất. Điều này cho phép luồng dữ liệu trơn tru theo cả hai hướng.
2. Nhân và bộ lọc chuẩn
Module Kernel cung cấp các phương thức như gets và print. Những thứ này về cơ bản là bộ lọc chuyển giao cho các hằng số toàn cục STDIN và STDOUT. Điều này nghĩa là mã của bạn có thể được chuyển hướng ở cấp độ hệ điều hành để xử lý tệp tin hoặc luồng mạng mà không cần thay đổi bất kỳ dòng logic nào.
$$\text{Luồng} \rightarrow \text{Bộ đệm} \rightarrow \text{Trình thông dịch Ruby}$$